GVS13 Ответов: 2

Повторный символ пропускается при программном сбросе пути в powershell.


Я сбрасываю символы один за другим из пути к файлу скрипта на консоль powershell с помощью API SendMessage.

При первом выполнении программы powershell пропускает повторяющийся символ из пути, который создает проблему.

Например, "C:\myFolder\abbc\test.ps1"

Из приведенного выше пути, когда я сбрасываю символы a в окно powershell, он пропускает 1 b из "abbc", так что последний путь, который сбрасывается на консоль, - это "C:\myFolder\abc\test.ps1".

Это происходит только при первом выполнении приложения, при последующих исполнениях оно работает нормально и также принимает повторяющиеся символы.

Что я уже пробовал:

Я попытался добавить время сна в 1 секунду после того, как сбросил другой символ.

[Правка Йохена Арндта: скопированный код и текст из комментария]
for(int i = 0;scriptPath[i] != '\0';i++)
{
    ::SendMessage(g_hwndConsole,WM_CHAR,scriptPath[i],1L);
    Sleep(3*1000);
}
Здесь g_hwndConsole это дескриптор консоли powershell
[/РЕДАКТИРОВАТЬ]

Jochen Arndt

Пожалуйста, покажите код, который сбрасывает (сообщение, которое отправляется).

При отправке в другое приложение вы обычно должны использовать PostMessage вместо SendMessage.

GVS13

for (int i = 0;scriptPath[i] ! = '\0';i++)
{
::SendMessage(g_hwndConsole, WM_CHAR, scriptPath[i], 1L);
Сон(3*1000);
}

Здесь g_hwndConsole-это дескриптор консоли powershell

2 Ответов

Рейтинг:
1

Jochen Arndt

Как уже упоминалось в моем комментарии:
Никогда не использовать SendMessage когда окно приема не принадлежит потоку, отправляющему сообщение. Воспользуйся PostMessage вместо. Также не должно быть необходимости устанавливать количество повторений, равное единице. Попробуйте вместо этого:

::PostMessage(g_hwndConsole, WM_CHAR, scriptPath[i], 0);


Рейтинг:
1

Richard MacCutchan

Видеть Сообщение WM_CHAR (Windows)[^] для надлежащего объяснения этого сообщения.


GVS13

Я что-то упускаю в этом? Не могли бы вы помочь мне понять эту точку зрения?

Richard MacCutchan

Вам нужно посмотреть на значение LPARAM, которое вы отправляете, которое указывает количество повторений. Возможно, в этом и есть проблема.