Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];

Вниз

А можно ли как-то заполучить строки вроде «Да», «Отмена» из 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.046 c
4-1182186323
A.L.E.X.A.N.D.E.R
2007-06-18 21:05
2008.01.20
Ввод данных в консольное приложение


15-1197444371
em240
2007-12-12 10:26
2008.01.20
VS2008+компиляция под FrameWork 1


15-1197964533
ArtemESC
2007-12-18 10:55
2008.01.20
Страшно ли вам умирать?


2-1197975866
Indigo
2007-12-18 14:04
2008.01.20
Замена в файле 3 больших букв на аналогичные маленькие


2-1197715980
Jim_Di
2007-12-15 13:53
2008.01.20
Проверка слова на валидность





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский