如何判断一个窗口是否可以接受字符

这个问题困扰了我6个小时。
也就说说这6个小时我都在网上不停地查到相关的解决办法。包括英文网站都找过了一无所获。
不过最后被我自己蒙出来了。
LRESULT lRes = ::SendMessage(hWnd,WM_CHAR,0,0);
如果lRes非0,则表示该窗口可以接受字符。

不过有些窗口不接受SendMessaeg这样就有问题了。继续研究中...

补充:
凡是SendMessage, 要确定那个hWnd的窗口存在,否则则很可能会死掉。
在不确定的情况下,使用PostMessage,但这样也就不能得到消息的执行结果了
命令行窗口与普通的 计量泵窗口有什么区别?你用spy++看一下就知道了。
如果你试图去截获命令行窗口的键盘消息,那将是失败的。

现在做一个实验:开始 -> 运行 -> ping www.baidu.com -t
这样得到一个命令行窗口,如果手工按Ctrl+C,它会结束。
那么如何编程模拟键盘动作呢?

首先测试 PostMessage, 结果是 计量泵没有任何发应。

最后我找到了解决的办法。代码如下。

HWND hWnd = ::FindWindow("ConsoleWindowClass",NULL);
 if( !hWnd )
  return;

 ::SetForegroundWindow(hWnd );
 keybd_event(VK_CONTROL, 0, 0, 0);
 keybd_event('C', 0, 0, 0);
 keybd_event(('C'), 0, KEYEVENTF_KEYUP, 0);
 keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0)
代码不加注释。没有注释就是最好的注释。

BOOL bRenamePrn( CString szName,CString szNew )
{
BOOL bRet = false;
PRINTER_DEFAULTS pd={0};
pd.DesiredAccess = PRINTER_ACCESS_USE | PRINTER_ACCESS_ADMINISTER;
HANDLE hPrn;
if( OpenPrinter( szName.GetBuffer(0),&hPrn,&pd) )
{
DWORD dwNeeded;
if( GetPrinter(hPrn,4,NULL,0,&dwNeeded)==NULL )
{
LPBYTE pBuf = new BYTE[dwNeeded];
if( GetPrinter(hPrn,4,pBuf,dwNeeded,&dwNeeded) )
{ http://www.51cto.com/
PRINTER_INFO_4 *info = (PRINTER_INFO_4 *)pBuf;
strcpy( info->pPrinterName,szNew );
bRet = SetPrinter(hPrn,4,pBuf,0);

if( !bRet )
AfxMessageBox("重命名失败");
}

delete pBuf;
}
}

if( !bRet )
AfxMessageBox("重命名失败 2");
return bRet;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值