Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.20;
Скачать: CL | DM;

Вниз

А можно ли как-то заполучить строки вроде «Да», «Отмена» из Win?   Найти похожие ветки 

 
Kolan ©   (2007-12-19 08:57) [0]

Виндовый MessageBox же как-то их получает, причем строки соответствуют языку винды.

Если можно, то как?


 
DVM ©   (2007-12-19 10:37) [1]


> Kolan ©   (19.12.07 08:57)  

Очень просто, загрузить нужный ресурс из нужной DLL. Скорее всего это будет та dll в которой находится функция для создания MessageBox.


 
Kolan ©   (2007-12-19 10:47) [2]

> Очень просто, загрузить нужный ресурс из нужной DLL.

user32 ?

А как енто сделать?


 
Palladin ©   (2007-12-19 10:53) [3]

исследовать user32.dll ResXplor"эром


 
palva ©   (2007-12-19 10:56) [4]

Открыть dll каким либо редактором ресурсов (MS Visual Studio) и посмотреть идентификатор нужных строк. Ну а потом все просто: загружаем нужную библиотеку загружаем ресурс... Немного посложнее, если ресурс не строковый, а вшит в диалог (диалог это тоже ресурс) его труднее достать. Но где-то должны обязательно лежать эти тексты и отдельно.


 
Kolan ©   (2007-12-19 11:17) [5]

Нашел есть там такой ресурс, чем(какими API функциями) теперь их получить?


 
Kolan ©   (2007-12-19 11:21) [6]

STRINGTABLE
LANGUAGE LANG_RUSSIAN, 0x1
{
800,  «ОК»
801,  «Отмена»
802,  «Пр&ервать»
803,  «По&втор»
804,  «&Пропустить»
805,  «&Да»
806,  «&Нет»
807,  «&Закрыть»
808,  «Справка»
809,  «&Повторить»
810,  «&Продолжить»
}


От они&#133


 
clickmaker ©   (2007-12-19 11:25) [7]


> [5] Kolan ©   (19.12.07 11:17)

LoadString(GetModuleHandle("user32.dll"), 801, szText, sizeof(szText));


 
palva ©   (2007-12-19 11:25) [8]

LoadLibrary
LoadString


 
Kolan ©   (2007-12-19 11:42) [9]

function LoadResourceString(AModuleName: string; AnID: Cardinal): string;
var
 Buffer: array[0&#133255] of Char;
begin
 LoadString(GetModuleHandle(PAnsiChar(AModuleName)), AnID, Buffer, SizeOf(Buffer));
 Result := StrPas(Buffer);
end;


Правильно? С памятью не напортачил?


 
Palladin ©   (2007-12-19 11:47) [10]

так быстрее
Function ls(Const s:String;ah:Cardinal):String;
Begin
SetLength(Result,5000);
SetLength(Result,LoadString(GetModuleHandle(PChar(s)),ah,@Result[1],5000));
End;


 
Kolan ©   (2007-12-19 11:50) [11]

803,  «По&втор»
809,  «&Повторить»

Как по английски?


 
Kolan ©   (2007-12-19 11:51) [12]


> так быстрее

Но мое правильное?


 
Palladin ©   (2007-12-19 11:55) [13]


> Но мое правильное?

ну да...


 
Kolan ©   (2007-12-19 12:03) [14]

> ну да&#133

Ок

803,  «По&втор»
Retry

809,  «&Повторить»
Try Again чтоли?


 
clickmaker ©   (2007-12-19 12:06) [15]


> [14] Kolan ©   (19.12.07 12:03)

Retry в русской 2000 на кнопке отображается как "Повторить поп" )


 
Kolan ©   (2007-12-19 12:09) [16]

Се, получилось. Постю сюда модуль, мало ли мож кому пригодится&#133

unit KSystemResourceStrings;

interface

const
 OkID = 800;
 CancelID = 801;
 AbortID = 802;
 RetryID = 803;
 IgnoreID = 804;
 YesID = 805;
 NoID = 806;
 CloseID = 807;
 HelpID = 808;
 TryAgainID = 809;
 ContinueID = 810;

function LoadResourceString(AModuleName: string;
 AnID: Cardinal): string;
function LoadUser32ResourceString(AnID: Cardinal): string;

function LoadOkString: string;
function LoadCancelString: string;
function LoadAbortString: string;
function LoadRetryString: string;
function LoadIgnoreString: string;
function LoadYesString: string;
function LoadNoString: string;
function LoadCloseString: string;
function LoadHelpString: string;
function LoadTryAgainString: string;
function LoadContinueString: string;

implementation
uses
 Windows,SysUtils;

function LoadResourceString(AModuleName: string;
   AnID: Cardinal): string;
var
 Buffer: array[0&#133255] of Char;
begin
 Result := "";
 LoadString(GetModuleHandle(PAnsiChar(AModuleName)), AnID, Buffer, SizeOf(Buffer));
 Result := StrPas(Buffer);
end;

function LoadUser32ResourceString(AnID: Cardinal): string;
begin
 Result := LoadResourceString("user32.dll", AnID);
end;

function LoadOkString: string;
begin
 Result := LoadUser32ResourceString(OkID);
end;

function LoadCancelString: string;
begin
 Result := LoadUser32ResourceString(CancelID);
end;

function LoadAbortString: string;
begin
 Result := LoadUser32ResourceString(AbortID);
end;

function LoadRetryString: string;
begin
 Result := LoadUser32ResourceString(RetryID);
end;

function LoadIgnoreString: string;
begin
 Result := LoadUser32ResourceString(IgnoreID);
end;

function LoadYesString: string;
begin
 Result := LoadUser32ResourceString(YesID);
end;

function LoadNoString: string;
begin
 Result := LoadUser32ResourceString(NoID);
end;

function LoadCloseString: string;
begin
 Result := LoadUser32ResourceString(CloseID);
end;

function LoadHelpString: string;
begin
 Result := LoadUser32ResourceString(HelpID);
end;

function LoadTryAgainString: string;
begin
 Result := LoadUser32ResourceString(TryAgainID);
end;

function LoadContinueString: string;
begin
 Result := LoadUser32ResourceString(ContinueID);
end;

end.


 
Palladin ©   (2007-12-19 12:10) [17]


> 809,  «&Повторить»
> Try Again чтоли?

Retry помоему


 
Palladin ©   (2007-12-19 12:11) [18]


> [16] Kolan ©   (19.12.07 12:09)

а зачем ввиде функций? лучше на initialization считать и определить как глобальные переменные


 
Kolan ©   (2007-12-19 12:11) [19]

> Retry в русской 2000 на кнопке отображается как «Повторить
> поп» )

Нет суда по MessageBox и его флагу MB_ABORTRETRYIGNORE — 803,  «По&втор» — это Retry


 
Kolan ©   (2007-12-19 12:12) [20]


> а зачем ввиде функций? лучше на initialization считать и
> определить как глобальные переменные

Хз, сделал так&#133 Иначе в голову не пришло.


 
Kolan ©   (2007-12-19 12:13) [21]


> лучше на initialization считать и определить как глобальные
> переменные

Да и как говорит Leonid Tryanovsky Глобальные переменные MD и я к нему присоединяюсь. :)


 
Palladin ©   (2007-12-19 12:15) [22]

дык блин глобальные переменные глобальным перменным рознь... если прямо так смущают что глобальные, то заведи их локально в модуле и в функциях возвращай их значение... а так глобальных переменных на самом деле очень даже много... DecimalSeparator например..


 
Kolan ©   (2007-12-19 12:19) [23]

> заведи их локально в модуле и в функциях возвращай их значение&#133

Ну а почему бы тогда просто функции не оставить?

Или ты хочешь сказать, что тогда пользователю придется помнить, что стоит эти функции вызывать в цикле, так как каждый раз будет обращение?


 
Palladin ©   (2007-12-19 12:21) [24]


> [23] Kolan ©   (19.12.07 12:19)

дело хозяйское, просто не вижу смысла каждый раз получать значения из dll


> что тогда пользователю придется помнить, что стоит эти функции
> вызывать в цикле, так как каждый раз будет обращение?

и это тоже


 
Kolan ©   (2007-12-19 12:23) [25]

> каждый раз получать значения из dll

Ок переделаю шас.


 
Kolan ©   (2007-12-19 13:41) [26]

> каждый раз получать значения из dll

Ок переделаю шас.

&#133

Переделал

unit KSystemResourceStrings;

interface

const
 OkID = 800;
 CancelID = 801;
 AbortID = 802;
 RetryID = 803;
 IgnoreID = 804;
 YesID = 805;
 NoID = 806;
 CloseID = 807;
 HelpID = 808;
 TryAgainID = 809;
 ContinueID = 810;

function LoadResourceString(AModuleName: string;
 AnID: Cardinal): string;
function LoadUser32ResourceString(AnID: Cardinal): string;

function GetOkString: string;
function GetCancelString: string;
function GetAbortString: string;
function GetRetryString: string;
function GetIgnoreString: string;
function GetYesString: string;
function GetNoString: string;
function GetCloseString: string;
function GetHelpString: string;
function GetTryAgainString: string;
function GetContinueString: string;

implementation
uses
 Windows,SysUtils;

var
 OkS: string;
 CancelS: string;
 AbortS: string;
 RetryS: string;
 IgnoreS: string;
 YesS: string;
 NoS: string;
 CloseS: string;
 HelpS: string;
 TryAgainS: string;
 ContinueS: string;

function LoadResourceString(AModuleName: string;
   AnID: Cardinal): string;
var
 Buffer: array[0&#133255] of Char;
begin
 Result := "";
 LoadString(GetModuleHandle(PAnsiChar(AModuleName)), AnID, Buffer, SizeOf(Buffer));
 Result := StrPas(Buffer);
end;

function LoadUser32ResourceString(AnID: Cardinal): string;
begin
 Result := LoadResourceString("user32.dll", AnID);
end;

function GetOkString: string;
begin
 Result := OkS;
end;

function GetCancelString: string;
begin
 Result := CancelS;
end;

function GetAbortString: string;
begin
 Result := AbortS;
end;

function GetRetryString: string;
begin
 Result := RetryS;
end;

function GetIgnoreString: string;
begin
 Result := IgnoreS;
end;

function GetYesString: string;
begin
 Result := YesS;
end;

function GetNoString: string;
begin
 Result := NoS;
end;

function GetCloseString: string;
begin
 Result := CloseS;
end;

function GetHelpString: string;
begin
 Result := HelpS;
end;

function GetTryAgainString: string;
begin
 Result := TryAgainS;
end;

function GetContinueString: string;
begin
 Result := ContinueS;
end;

initialization
 OkS := LoadUser32ResourceString(OkID);
 CancelS := LoadUser32ResourceString(CancelID);
 AbortS := LoadUser32ResourceString(AbortID);
 RetryS := LoadUser32ResourceString(RetryID);
 IgnoreS := LoadUser32ResourceString(IgnoreID);
 YesS := LoadUser32ResourceString(YesID);
 NoS := LoadUser32ResourceString(NoID);
 CloseS := LoadUser32ResourceString(CloseID);
 HelpS := LoadUser32ResourceString(HelpID);
 TryAgainS := LoadUser32ResourceString(TryAgainID);
 ContinueS := LoadUser32ResourceString(ContinueID);

end.



Страницы: 1 вся ветка

Текущий архив: 2008.01.20;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.018 c
15-1197388614
@!!ex
2007-12-11 18:56
2008.01.20
Документация по дельфи и WinAPI


2-1198260347
ЗфдЗфднср
2007-12-21 21:05
2008.01.20
Проблемка с Union


2-1198174004
Stepper
2007-12-20 21:06
2008.01.20
Как при сохранении данных из RichEdit - добавить к ним строку..


15-1197359222
Kolan
2007-12-11 10:47
2008.01.20
Code Gear тут дисочки раздает :)


1-1192652861
cadmy
2007-10-18 00:27
2008.01.20
реакция на клавиши в свернутой программе