草庐IT

c++ - 在 C++ 中从可执行路径(或从 hWnd,或从 pid)获取程序名

我有一个窗口的HWND,使用GetWindowThreadProcessId我得到它的进程的pid,通过GetModuleFileNameEx我得到了可执行路径(我使用PathFindFileName来获取可执行名称)。但是,我似乎找不到任何方法(如果有的话)来获取程序的名称。例如,对于可执行文件chrome.exe,我想获取名称“GoogleChrome”。你能帮帮我吗?编辑:谢谢大家!使用您推荐的引用资料,我想出了这个:CStringcsProductName;DWORDcbFileVersionInfo=GetFileVersionInfoSize(pszProcessPath,

c++ - 是否可以使用 Windows API 分配段?

我想知道Windows程序是否可以在进程的本地描述符表中分配一个段描述符。是否有WindowsAPI函数可以使用提供的线性偏移量、段长度和标志组合(RWX)将新的段描述符安装到正在运行的进程的LDT? 最佳答案 可以使用未记录的NTAPI,特别是NtSetLdtEntries。请注意,Windowsx86-64不会设置LDT,因此这仅适用于x86。Here's一些代码。 关于c++-是否可以使用WindowsAPI分配段?,我们在StackOverflow上找到一个类似的问题:

c++ - 将 lparam 作为指向类的指针发送,并在 WndProc() 中使用它

我有这个抽象代码:我想在CreateWindowEx()中使用lParam(最后一个参数)来保存指向在main-SaveArr开头声明的类的指针。然后,我想在函数WndProc中使用它。一开始我做了一个全局数组,然后我可以在任何地方使用它,但就c++而言,它并不是那么“聪明”,所以我试图对它进行一些升级。classSamples{intarr[ITERATIONS+1];intindex;...}INTWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){Samples*S

c++ - 无需重启即可访问自定义环境变量(使用 C++)

我正在使用C++编写一个程序,该程序利用自定义系统范围的环境变量。该变量由msi安装程序设置。后来我的程序使用GetEnvironmentVariable()API读取它。问题是似乎需要重新启动系统才能使我的自定义环境变量在我的程序中可见,我不想为此重新启动系统。奇怪的是,如果(不重启)我右键单击“我的电脑”,然后进入“属性”->“高级”并单击“环境变量”,我的自定义环境变量就在该列表中,但出于某种原因GetEnvironmentVariable()还是没看到。那么,是否有任何其他API可以让我在不重启系统的情况下使用?(因为系统属性可以清楚地看到它。) 最

c++ - 模拟按下的快捷方式

抱歉,我必须以这种迂回的方式描述功能,但我不知道如何最好地实现所需的功能*我有一个简单的程序,可以在按下全局热键时将一些数据放入剪贴板。用户通常的用例是直接将该文本粘贴到Photoshop中的文本字段中。IE。-假设ctrl-x调用全局热键-他们一直在执行ctrl-xctrl-v。显然这是糟糕的设计。那么基本模拟ctrl-v事件以便Photoshop无需额外按键即可直接粘贴文本的最简单方法是什么?因为winapi标签暗示我在这里不关心Mac。必须在Win7下工作,与XP/Vista的兼容性将是一个明确的优势。脚本的其余部分是用Python3和PyQt4编写的,但如果需要,我也可以编写一

c++ - VS2010中如何设置Windows SDK目标版本?

我最近安装了Windows8SDK版本(8.0和8.0A)以及VS2011Beta。这导致我所有的VS2010项目都尝试针对WindowsSDK版本8.0而不是7.1A(它们应该针对它进行构建)进行构建。我想弄清楚如何设置应该使用哪个SDK作为目标版本。我找到了这个页面:http://msdn.microsoft.com/en-us/library/ff660764.aspx其中指出:在VisualStudio2010中使用WindowsSDK工具在VisualStudio2010中,打开一个解决方案(.sln)文件或创建一个解决方案。在解决方案资源管理器中,右键单击解决方案节点,然后

c++ - 原始输入鼠标 - 未收到数据

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭10年前。我正在从键盘和鼠标获取原始数据-键盘数据正在完美地接收到我的应用程序,我完全没有遇到任何问题。不知何故,我的应用程序没有收到任何鼠标数据。事实上,它甚至没有通过if(raw->header.dwType==RIM_TYPEMOUSE)子句。caseWM_CREATE:{/*...otherinitialisations...*///registerfor

c++ - 如何同时等待 I/O 完成端口和事件?

有什么方法可以实现吗?例如,我有一个I/O完成端口,10个工作线程正在从中提取任务。每个任务都与一个对象相关联。有些对象无法同时处理,因此如果一个线程正在处理其中一个对象,而第二个线程执行需要该对象的任务,则第二个线程必须等待第一个线程完成。作为解决方法,对象可以有一个在释放时发出信号的事件。如果一个线程因为接收到的任务需要一个锁定的对象而“卡住”,它可以等待锁定的对象被释放,或者等待一个新的任务排队。如果它接收到一个新任务,它将把它无法处理的任务推回队列。我知道其他方法,但这似乎是应该存在的功能。这可以通过WindowsAPI实现吗? 最佳答案

C++模拟鼠标左键点击最小化程序

我一直在寻找关于我遇到的这个特殊问题的一些信息,我希望能够模拟鼠标左键单击我当前连接的程序。现在,我创建了一个线程来检查数据库中的某些值,当这些值返回时(我正在寻找的值),我希望能够在任何x、y中发送鼠标左键单击程序的坐标(最小化时)。对于Windows7如何做到这一点?谢谢!编辑:这是我调用线程的方式...HWNDchild=GetActiveWindow();if(child==NULL)MessageBox(0,"Couldn'tgetthechildhwnd!","",0);DWORDID;HANDLEthread_check_game=CreateThread(NULL,0,

c++ - WINAPI 代码中的链接器错误

我正在尝试编译以下代码,但出现链接器错误。谢谢你告诉我我错过了什么。#include#pragmacomment(lib,"user32.dll")intmain(){returnMessageBoxA(0,"Message","Warn",0x01);}fatalerrorLNK1104:无法打开文件“user32.dll” 最佳答案 由于LIB文件用于在编译时链接DLL,MessageBoxA驻留在user32.dll中并且需要user32.lib才能正确链接。因此将user32.dll更改为user32.libin#pragm