小编Mer*_*ijn的帖子

无法从其他应用程序(窗口)获取文本

我正在尝试从另一个应用程序中提取文本。这个应用程序现在可能很简单,我只是希望它能够工作(目前)。

我使用的代码:

public static class ModApi
{
    [DllImport("user32.dll", EntryPoint = "SendMessageTimeout", SetLastError =     true, CharSet = CharSet.Unicode)]
    public static extern uint SendMessageTimeoutText(IntPtr hWnd, int Msg, int countOfChars, StringBuilder text, uint flags, uint uTimeoutj, uint result);

    public static string GetText(IntPtr hwnd)
    {
        var text = new StringBuilder(1024);

        if (SendMessageTimeoutText(hwnd, 0xd, 1024, text, 0x2, 5000, 0) != 0)
        {
            return text.ToString();
        }

        MessageBox.Show(text.ToString());
        return "";
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用以下方式调用此代码:

IntPtr MytestHandle = new IntPtr(0x00788600);
HandleRef hrefHWndTarget = new HandleRef(null, MytestHandle);
Run Code Online (Sandbox Code Playgroud)

其中0x00788600是我正在运行的应用程序之一的示例(我 …

c# text extract

4
推荐指数
1
解决办法
3475
查看次数

在C#中处理OpenFileDialog?

我已经搜索了整个Stack Overflow,但我找不到以下答案:

当我使用我的OpenFileDialog时,我打开的文件被阻止使用我的程序,直到我关闭我的程序.因此,如果我打开图像,则不允许在Windows资源管理器中替换该图像.

我认为这是处理我的OpenFileDialog的问题,但我不知道如何解决它...

我的代码:

using (OpenFileDialog ofd = new OpenFileDialog())
{
    ofd.Title = "Open Image";
    ofd.Filter = "PNG Image(*.png|*.png" +
                 "|GIF Image(*.gif|*.gif" +
                 "|Bitmap Image(*.bmp|*.bmp" +
                 "|JPEG Compressed Image (*.jpg|*.jpg";

    if (ofd.ShowDialog() == DialogResult.OK)
    {
        pictureBox1.Image = new Bitmap(ofd.FileName);
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为该using块可以解决这个问题,但是没有...它仍然被程序使用.我想在图片框中加载图像,然后我希望图像再次可用(所以我可以重命名,替换它等等).

c# dispose using openfiledialog picturebox

1
推荐指数
1
解决办法
3392
查看次数

何时在C#中声明有关效率/速度的变量

我正在运行一些完全为效率而构建的实现.我对这个主题还不是很有经验,并且想知道何时最好地声明变量.我的代码的以下部分特别是:

//Variables not declared in the next part are declared here (like xx, y1, x1.....)
    for(s = 0; s < this.Width; s++)
        {
            y = ymin;
            for(z = 0; z < this.Height; z++)
            {
                x1 = 0;
                y1 = 0;
                looper = 0;
                while(looper < curMaxIter && Math.Sqrt((x1 * x1) + (y1 * y1)) < 2)
                {
                    looper++;
                    xx = (x1 * x1) - (y1 * y1) + x;
                    y1 = 2 * x1 * y1 + y;
                    x1 = …
Run Code Online (Sandbox Code Playgroud)

c# variables performance declaration cpu-speed

-2
推荐指数
1
解决办法
91
查看次数