On-line: PSP, гостей 0. Всего: 1 [подробнее..]
АвторСообщение
администратор




Пост 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. Как узнать что путь к папке из которой запускается программа имеет длинные имена ?
На вскидку приходит вариант разбить на токены с разделителем "\" и затем чекать длины
всех токенов.
Есть еще метода ?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 85 , стр: 1 2 3 4 5 All [только новые]


администратор




Пост N: 4745
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.04.15 14:57. Заголовок: SergKis А можете не..


SergKis
А можете немного допилить INKEYGUI что бы она вернула ASCII код с учетом раскладки ?
Вероятно нужна эта функция https://msdn.microsoft.com/en-us/library/windows/desktop/ms646318%28v=vs.85%29.aspx


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4747
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.04.15 16:53. Заголовок: Упс , понял , надо т..


Упс , понял , надо так ? hb_ansitooem(chr(toasciiex(a)))

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 598
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.04.15 20:04. Заголовок: Dima пишет:Упс , пон..


Dima пишет:
 цитата:
Упс , понял , надо так ?


и что ? получилось ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4748
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.04.15 20:16. Заголовок: SergKis пишет: и чт..


SergKis пишет:

 цитата:
и что ? получилось ?


Практически да , допиливаю пока.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4749
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.04.15 09:18. Заголовок: SergKis А вот такой..


SergKis
А вот такой фокус похоже не работает.
Keyboard chr(112)
? inkeygui() // ни какой реакции на посыл кода через Keyboard

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 600
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.04.15 10:13. Заголовок: Dima в wvt соорудил..


Dima
в wvt соорудили перекодировку (см.функции выше ..event..1) VK клавиш

 цитата:
ни какой реакции на посыл кода через Keyboard


возможно надо использовать сообщение WM_COPYDATA, типа Keyboard посылает а в inkeygui вставить обработку

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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()

* ни чего грузит и все пучком.



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1059
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 19.04.15 21:29. Заголовок: Ну да, именно так ))..


Ну да, именно так )))

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4755
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.04.15 21:33. Заголовок: PSP пишет: Ну да, и..


PSP пишет:

 цитата:
Ну да, именно так )))


Нет что б сразу сказать подробнее )))
2 дня убил да еще мучал InkeyGui (с ним тоже вариант , но функция специфическая)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1060
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 19.04.15 22:07. Заголовок: Я ж не знал... ))..


Я ж не знал ) А ты написал, что уже пробовал... ))

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5468
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.01.16 16:42. Заголовок: Можно ли в вызываемо..


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

ЗЫ
MT приложение.

Проехали , нашел.
hb_threadSelf()

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 963
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 25.01.16 13:21. Заголовок: pThID := hb_threadSe..


pThID := hb_threadSelf()
Возвращает указатель потока, из которого вызывается эта функция.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5607
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.04.16 17:04. Заголовок: Почему есть функции ..


Почему есть функции HB_LEFTEQ() и HB_LEFTEQI() (удобнее чем LEFT()) а подобных аналогов c RIGHT нет ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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, наверное, так часто не пользуются

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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-м параметром.



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5671
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.05.16 21:33. Заголовок: Посетила меня идея ,..


Посетила меня идея , организовать в своей сетевой задаче просмотр
экрана другого юзера , для начала только скрин , в перспективе "видео" (показ тех же скринов с задержкой).
Реализация думаю не очень сложная и решу.
Есть пара вопросов ( Терминал GTWVT (WVG) )
1. Как средствами Harbour снять скрин окна с нужным заголовком и сохранить в файл формата JPG скажем.
2. -\\-\\-\\\-\\- cнять скрин всего рабочего стола со всеми окнами и -\\-\\-\\\-\\-



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4953
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.05.16 01:11. Заголовок: Dima пишет: экрана ..


Dima пишет:

 цитата:
экрана другого юзера , для начала только скрин


Давай уж сразу на МиниГуи !
Тем более там уже реализовано снятие всего экрана ! Не помню какой пример, но точно сам видел !

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 85 , стр: 1 2 3 4 5 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 237
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет