我用来创建一个自定义函数,如winexec(...):Hwnd将重新执行已执行应用程序的句柄.
我确实使用了findwindow()但是如果它改变了窗口标题就有问题.
我想知道是否有可能获得桌面的表格.我试图从桌面获取hWnd并使用Form.FromHandle来获取表单.但它总是返回null.所以我认为这是不可能的; 如果有可能,有人可以给我看一个示例代码.以下代码不起作用:
hWnd = GetDesktopWindow();
desktop = Form.FromHandle(hWnd) as Form;
System.Diagnostics.Debugger.Break();
Run Code Online (Sandbox Code Playgroud)
PS有人也可以解释我在这里做错了什么.
虽然我们都在这个话题上纠缠不清,但事实证明,虽然 UWP 应用程序确实有顶级窗口,您可以向它们发送(明智的)消息 (*),并且这些消息确实通过并产生了预期的效果,Spy++似乎永远不会看到这些消息,或者确实看到 Windows 本身可能发送的任何其他消息。
任何人都可以对此有所了解吗?
只是为了提供一些背景信息,Spy 可以毫无问题地定位和检查这些窗口(“查找工具”工作正常),但消息记录完全静音。我已经测试了设置应用程序、屏幕键盘、日历和计算器,并且在 Spy 中勾选了所有适当的“附加窗口”复选框。我还使用 Process Explorer 来检查 Spy 是否以“高完整性级别”运行(因为它大概是提升的),并且确实如此。
(*) 是的,我知道我们不应该这样做,但是,你知道。
在C#中,此SendMessage函数成功提高了音量:
[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
SendMessage(Handle, 0x319, (int)Handle, APPCOMMAND_VOLUME_UP);
Run Code Online (Sandbox Code Playgroud)
但是在C++中,这个SendMessage函数不起作用,即卷不会上升:
// HWND hwnd = CreateWindow(...
SetWindowText(hwnd, "Hi"); // Worked
SendMessage(hwnd, WM_APPCOMMAND, (int)hwnd, APPCOMMAND_VOLUME_UP); // Don't work
Run Code Online (Sandbox Code Playgroud)
我错了什么?你能帮我解决一下吗?谢谢!
完整代码:
#include <windows.h>
HHOOK _hhook;
HWND hwnd;
HINSTANCE _hInstance;
KBDLLHOOKSTRUCT kbdStruct;
LRESULT __stdcall HookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0)
{
if (wParam == WM_KEYDOWN)
{
// lParam is the pointer to the struct containing the data needed, so cast …Run Code Online (Sandbox Code Playgroud) 我正在使用WinAPI并且我正在尝试制作一个允许您更改标题的程序.
#if defined(UNICODE) && !defined(_UNICODE)
#define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
#define UNICODE
#endif
#include <tchar.h>
#include <windows.h>
#include <string>
#include <sstream>
using namespace std;
string HWNDToString(HWND inputA);
void setTitle(string inputA);
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
TCHAR szClassName[ ] = _T("CodeBlocksWindowsApp");
int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow)
{
HWND hwnd;
MSG messages;
WNDCLASSEX wincl;
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof (WNDCLASSEX);
wincl.hIcon = LoadIcon …Run Code Online (Sandbox Code Playgroud)