Автор | Сообщение |
|
| |
Пост N: 4326
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.12.14 16:59. Заголовок: Пара простых вопросов ;)
1. Как узнать что путь к папке из которой запускается программа имеет символы кирилицы ? На ум приходит такой способ proc main() local a REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") REQUEST HB_CODEPAGE_RU866 hb_cdpSelect( "RU866" ) a:=curdir() ? a if hb_oemtoansi(a)#a ? "Есть кирилица" endif wait RETURN NIL Есть еще метода ? 2. Как узнать что путь к папке из которой запускается программа имеет длинные имена ? На вскидку приходит вариант разбить на токены с разделителем "\" и затем чекать длины всех токенов. Есть еще метода ?
|
|
|
Ответов - 85
, стр:
1
2
3
4
5
All
[только новые]
|
|
|
| |
Пост N: 4745
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.04.15 14:57. Заголовок: SergKis А можете не..
|
|
|
|
| |
Пост N: 4746
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.04.15 16:50. Заголовок: Почти победил преобр..
Почти победил преобразование VK кодов , но с кирилицей фигня полная. Что не так сделал ? Собирал так c:\hb32\bin\hbmk2 t -gtwvt -gui #include "hbgtinfo.ch" proc main local a REQUEST HB_GT_WVT_DEFAULT REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") REQUEST HB_CODEPAGE_RU866 hb_cdpSelect( "RU866" ) hb_gtInfo(HB_GTI_FONTNAME, 'Lucida Console') ? "TEST" do while (a:=inkeygui(0))#27 ? a ? chr(toasciiex(a)) enddo return ************************* #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" #include "hbapiitm.h" HB_FUNC( TOASCIIEX ) { HKL hkl = GetKeyboardLayout( 0 ); BYTE KeyState[256]; WORD lpChar; GetKeyboardState( KeyState ); ToAsciiEx( hb_parnl(1), 0, KeyState, &lpChar, 0, hkl ); hb_retnl( LOBYTE( lpChar )); } #pragma ENDDUMP #pragma BEGINDUMP #include <windows.h> #include <hbapi.h> HB_FUNC( INKEYGUI ) { MSG Msg; BOOL lNoLoop=FALSE; UINT dwTimer, nRet=0, uTimeout=10; if( HB_ISNUM(1) ) uTimeout = hb_parni(1); if( uTimeout==0 ) uTimeout = 0x0FFFFFFF; dwTimer = SetTimer( NULL, 0, uTimeout, NULL); while( GetMessage(&Msg, NULL, 0, 0) ) { switch( Msg.message ) { case WM_KEYDOWN : case WM_SYSKEYDOWN : { nRet = Msg.wParam; lNoLoop = TRUE; break; } case WM_TIMER : { lNoLoop = Msg.wParam == dwTimer; break; } } if( lNoLoop ) { KillTimer( NULL, dwTimer ); hb_retni( nRet ); return ; } else { TranslateMessage( &Msg ); // Translates virtual key codes DispatchMessage( &Msg ); // Dispatches message to window } } } #pragma ENDDUMP
|
|
|
|
| |
Пост N: 4747
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.04.15 16:53. Заголовок: Упс , понял , надо т..
Упс , понял , надо так ? hb_ansitooem(chr(toasciiex(a)))
|
|
|
|
| постоянный участник
|
Пост N: 598
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.04.15 20:04. Заголовок: Dima пишет:Упс , пон..
Dima пишет: и что ? получилось ?
|
|
|
|
| |
Пост N: 4748
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.04.15 20:16. Заголовок: SergKis пишет: и чт..
SergKis пишет: Практически да , допиливаю пока.
|
|
|
|
| |
Пост N: 4749
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.04.15 09:18. Заголовок: SergKis А вот такой..
SergKis А вот такой фокус похоже не работает. Keyboard chr(112) ? inkeygui() // ни какой реакции на посыл кода через Keyboard
|
|
|
|
| постоянный участник
|
Пост N: 600
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.04.15 10:13. Заголовок: Dima в wvt соорудил..
Dima в wvt соорудили перекодировку (см.функции выше ..event..1) VK клавиш цитата: | ни какой реакции на посыл кода через Keyboard |
| возможно надо использовать сообщение WM_COPYDATA, типа Keyboard посылает а в inkeygui вставить обработку
|
|
|
|
| |
Пост N: 4754
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.04.15 21:23. Заголовок: PSP пишет: Использ..
PSP пишет: цитата: | Использовать в цикле hb_ReleaseCPU() не подойдет? |
| Таки да Если в основном потоке клаву опрашивать так , nkey:=Inkey(0.01) , проц не грузит. Если так же ее опрашивать в IDLE функции живущей в HB_IdleAdd() , то да грузит проц. Долго игрался и доигрался В IDLE опрашивать надо так nKey:=Inkey() hb_releasecpu() * ни чего грузит и все пучком.
|
|
|
|
| постоянный участник
|
Пост N: 1059
Зарегистрирован: 27.01.07
|
|
Отправлено: 19.04.15 21:29. Заголовок: Ну да, именно так ))..
Ну да, именно так )))
|
|
|
|
| |
Пост N: 4755
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.04.15 21:33. Заголовок: PSP пишет: Ну да, и..
PSP пишет: Нет что б сразу сказать подробнее ))) 2 дня убил да еще мучал InkeyGui (с ним тоже вариант , но функция специфическая)
|
|
|
|
| постоянный участник
|
Пост N: 1060
Зарегистрирован: 27.01.07
|
|
Отправлено: 19.04.15 22:07. Заголовок: Я ж не знал... ))..
Я ж не знал ) А ты написал, что уже пробовал... ))
|
|
|
|
|
| |
Пост N: 5468
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.01.16 16:42. Заголовок: Можно ли в вызываемо..
Можно ли в вызываемой функции узнать , она была вызвана из основного потока или дочернего ? ЗЫ MT приложение. Проехали , нашел. hb_threadSelf()
|
|
|
|
| moderator
|
Пост N: 963
Зарегистрирован: 06.07.06
|
|
Отправлено: 25.01.16 13:21. Заголовок: pThID := hb_threadSe..
pThID := hb_threadSelf() Возвращает указатель потока, из которого вызывается эта функция.
|
|
|
|
| |
Пост N: 5607
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.04.16 17:04. Заголовок: Почему есть функции ..
Почему есть функции HB_LEFTEQ() и HB_LEFTEQI() (удобнее чем LEFT()) а подобных аналогов c RIGHT нет ?
|
|
|
|
| постоянный участник
|
Пост N: 1188
Зарегистрирован: 09.10.06
|
|
Отправлено: 17.04.16 18:21. Заголовок: В ChangeLog логика..
В ChangeLog логика HB_LEFT* ясно описана + added new function to replace "=" operator without the SET EXACT ambiguity in its most common pattern of usage: hb_LeftEq( <cString1>, <cString2> ) -> <lResult> it's equivalent to this expression, but faster and shorter: ( Left( <cString1>, Len( <cString2> ) ) == <cString2> ) 2014-01-22 03:09 UTC+0100 Viktor Szakáts + added hb_LeftEqI(). Same as hb_LeftEq() but case-insensitive. hb_LeftEqI( <cString1>, <cString2> ) -> <lResult> 2014-02-04 13:38 UTC+0100 Viktor Szakáts Ну а RIGHT, наверное, так часто не пользуются
|
|
|
|
| |
Пост N: 5608
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.04.16 21:16. Заголовок: Петр пишет: Ну а RI..
Петр пишет: цитата: | Ну а RIGHT, наверное, так часто не пользуются |
| Да наверное так и есть. PRG аналоги могли бы быть примерно такими Func Hb_rightEQI(Cstr1 , Cstr2) return Iif (Hb_isstring(Cstr1) .and. Hb_isstring(Cstr1) ; .and. Right(upper(Cstr1),len(Cstr2))==Upper(Cstr2),.T.,.F.) Примерно так же Hb_rightEQ , но без Upper или можно было сделать единую функцию Hb_right() с 3-м параметром.
|
|
|
|
| |
Пост N: 5671
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.05.16 21:33. Заголовок: Посетила меня идея ,..
Посетила меня идея , организовать в своей сетевой задаче просмотр экрана другого юзера , для начала только скрин , в перспективе "видео" (показ тех же скринов с задержкой). Реализация думаю не очень сложная и решу. Есть пара вопросов ( Терминал GTWVT (WVG) ) 1. Как средствами Harbour снять скрин окна с нужным заголовком и сохранить в файл формата JPG скажем. 2. -\\-\\-\\\-\\- cнять скрин всего рабочего стола со всеми окнами и -\\-\\-\\\-\\-
|
|
|
|
| постоянный участник
|
Пост N: 4953
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.05.16 01:11. Заголовок: Dima пишет: экрана ..
Dima пишет: цитата: | экрана другого юзера , для начала только скрин |
| Давай уж сразу на МиниГуи ! Тем более там уже реализовано снятие всего экрана ! Не помню какой пример, но точно сам видел !
|
|
|
|
| |
Пост N: 187
Зарегистрирован: 21.04.13
|
|
Отправлено: 25.05.16 07:21. Заголовок: ScreenshotMaker
есть такой пример..\MiniGUI\SAMPLES\Applications\ScreenshotMaker портируется и в harbour, из примера нужно взять JPG.DLL = = = DYNAMIC SaveToJpgEx ... Function SnapJpg(cSaveFile,cfile_dll) Local nW := HB_GTINFO( HB_GTI_DESKTOPWIDTH ) Local nH := HB_GTINFO( HB_GTI_DESKTOPHEIGHT ) Local nHandle := GETDESKTOPWINDOW() Local ret := .f. cfile_dll := IIF(cfile_dll=NIL,"jpg.dll",cfile_dll) if file(cfile_dll) cSaveFile := IIF( cSaveFile=NIL, "test.jpg" ,cSaveFile) Calldll32( "SaveToJpgEx",cfile_dll, nHandle, cSaveFile, nW, nH ) ret:=file(cSaveFile) else tolog("SnapJpG: Нет файла DLL {"+cfile_dll+"} ") ret:=.f. endif Return ret
|
|
|
|
| |
Пост N: 5673
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.05.16 13:33. Заголовок: petr707 Спасибо за ..
petr707 Спасибо за идею , работает. #include "hbgtinfo.ch" #include "hbdyn.ch" Proc main REQUEST HB_GT_WVT REQUEST HB_GT_WVG_DEFAULT ? " " ? snapJpg(CurDrive()+":\"+CurDir()+"\test.jpg",0) wait return ********************* Func SnapJpg(cfile,nmode) Local nW Local nH Local nHandle hb_default(@nmode,0) hb_default(@cfile,"test.jpg") if nmode==0 nHandle := wapi_GETDESKTOPWINDOW() nW := HB_GTINFO( HB_GTI_DESKTOPWIDTH ) nH := HB_GTINFO( HB_GTI_DESKTOPHEIGHT ) else nHandle := GETFOREGROUNDWINDOW() nw := HB_GTINFO( HB_GTI_SCREENWIDTH ) nh := HB_GTINFO( HB_GTI_SCREENHEIGHT ) endif hb_DynCall( { "SaveToJpgEx", "jpg.dll",HB_DYN_CALLCONV_STDCALL },nHandle,cfile,nw,nh ) return HB_fileexists(cfile) ***************** #pragma BEGINDUMP #include <windows.h> #include <hbapi.h> HB_FUNC (GETFOREGROUNDWINDOW) { HWND hWnd = GetForegroundWindow(); hb_retnl ((LONG) hWnd); } #pragma ENDDUMP
|
|
|
Ответов - 85
, стр:
1
2
3
4
5
All
[только новые]
|
|