在这里看到简单的Delphi代码:
function EnumProc(Handle: THandle; Lparam: LPARAM): Bool; stdcall;
begin
TMemo(Lparam).Lines.Add(IntToStr(Handle));
end;
Run Code Online (Sandbox Code Playgroud)
叫它 :
procedure TForm1.FormCreate(Sender: TObject);
begin
EnumWindows(@EnumProc, Lparam(Memo1))
end;
Run Code Online (Sandbox Code Playgroud)
此代码在Windows XP,Window 7 x86和Windows 8中成功运行.
现在测试Windows 7 x64中的代码,它只返回一个项目,这意味着Windows只调用一次EnumProc,这意味着EnumProc的结果为false,没有更多的窗口可用于枚举...
现在将我们的EnumProc更改为:
function EnumProc(Handle: THandle; Lparam: LPARAM): Bool; stdcall;
begin
TMemo(Lparam).Lines.Add(IntToStr(Handle));
result:= True;
end;
Run Code Online (Sandbox Code Playgroud)
好的,这个怎么样?!它适用于任何版本的Windows,包括Windows 7 x64!
任何的想法 ?它是Windows中的错误还是我的代码中的错误?
关心Mojtaba.
好吧,这可能是一个愚蠢的问题.我知道minecraft是用Java编写的,Java不能改成exe文件.然而,当我下载minecraft时,它说minecraft.exe并作为exe文件运行,而不是CLASS文件.有人可以向我解释一下吗?
我需要一个简单的bool来通知一个长时间运行的进程abord作为循环的一部分,如下所示:
bool Abort = false;
void MyLongRunningMethod()
{
while(true)
{
// loop code goes here, takes 2 hours ish to run
if(Abort)
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道如何正确地写这个,但是我想知道,如果我把它保留下来有任何风险吗?或者是唯一的风险(在我的情况下这是一个非问题)循环可以运行一个额外的时间(在写入的同时读取bool).
我错过了任何奇怪的边缘情况,或者这实际上是完全正确的,如果我对以下声明很好:"当abort为真时,该方法应该会中断,但可能会在没有副作用的情况下再运行一次"?或者我错过了一些可以彻底打破世界的东西?
我正在使用 fork() 和 system() 命令,当我运行此示例代码时,我发现子进程在系统调用完成后没有打印“Song complete...”行。这是正常的还是我错过了什么?
我认为 system() 会完成它的工作,然后返回到子进程并继续以愉快的方式退出或执行其他任务。这个代码示例不会发生这种情况。
#include <sys/types.h> /* pid_t */
#include <sys/wait.h> /* waitpid */
#include <stdio.h> /* printf, perror */
#include <stdlib.h> /* exit */
#include <unistd.h> /* _exit, fork */
int main(void)
{
pid_t pid;
int i;
pid = fork();
if (pid == -1) {
/*
* When fork() returns -1, an error happened.
*/
perror("fork failed");
exit(EXIT_FAILURE);
}
else if (pid == 0) {
/*
* When fork() returns 0, we are in …Run Code Online (Sandbox Code Playgroud) 当我将我的设备连接到我的外围设备时,他会问我一个密码(设备上会显示一个弹出窗口)。我想在连接期间以编程方式发送此密码。
我正在使用 CBCentralManager,但找不到发送它的方法。
有什么建议?
我正在VS2010中开发VSTO Outlook加载项。在该ThisAddIn_Startup方法(外接程序启动时称为)中,我的代码需要检查Outlook是否在公司网络上运行。如果Outlook未在网络上运行,则大约需要3秒钟才能得到答案。因此,我将代码包装在一个Task中,以使其运行Async以确保它在检查时不会挂起Outlook。
例如
bool onNetwork = false;
Task task = Task.Factory.StartNew(() =>
{
onNetwork = IsConnectedToNetwork();
});
Run Code Online (Sandbox Code Playgroud)
完成检查后,需要加载并显示相关表格。所以我将代码更改为:
Task task = Task.Factory.StartNew(() =>
{
if (IsConnectedToNetwork())
{
OnNetworkForm onNetworkForm = new OnNetworkForm();
onNetworkForm.Show();
}
else
{
OffNetworkForm offNetworkForm = new OffNetworkForm();
offNetworkForm.Show();
}
});
Run Code Online (Sandbox Code Playgroud)
但是需要将窗体加载到UI线程上。否则,InvalidOptionationException当它尝试加载并显示带有消息的表单时,我得到一个提示:
调用线程必须是STA,因为许多UI组件都需要STA。
我的问题是如何使窗体加载到UI线程上?
请注意
我不能使用await,因为那是C#5.0,而VS 2010不支持C#5.0。而且ThisAddin类不是控件,因此没有可用的BeginInvokeor Invoke方法。
我遇到了一个问题,并且关于同一问题的旧答案不够新,所以我认为可以再次询问。我的问题是:如何将一个表单停靠在另一个表单中?使用Panel 和Form 会更合适吗?第一种选择可能吗?提前致谢。
我有一个周期.迭代次数取决于用户的选择.我得到double的数量,但进度条只接受int;
double progr = 100 / (listBox2.Items.Count * listBox4.Items.Count);
progressBar1.Value += progr; <-
Run Code Online (Sandbox Code Playgroud) 我想知道为什么.NET中Int32的最大可能值是2147483647而不是2147483648.因为2³= 2147483648.
谢谢
我有一个dctionary,我正在调用.GetEnumerator(); 并将其分配给变量.然后我使用新分配的变量来访问我的字典并更改值.但它是null并且给我一个NullException消息.见下面的代码:
这就是我的字典创建方式
public Dictionary<Tuple<int, int>, string> GenerateTable(int _x, int _y)
{
int total = _x * _y;
var grid = new Dictionary<Tuple<int, int>, string>(); //!Might need this later!
for (int i = 1; i <= _x; i++) // outer loop is column
{
for (int ii = 1; ii <= _y; ii++) // Inner loop is row -
{
grid.Add(Tuple.Create(i, ii), "O");
}
}
return grid; // Should have same amount of elements as int total
}
Run Code Online (Sandbox Code Playgroud)
这是我调用.GetEnumerator的代码
public …Run Code Online (Sandbox Code Playgroud)