purebasic.info

PureBasic forum
Текущее время: Пн июл 13, 2020 4:24 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 57 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Ср май 22, 2013 6:01 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 780
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 14 раз.
Пункты репутации: 0
Никита Однороб Чьё вы меня грузите при чем тут это
Цитата:
AddSysTrayIcon(#SysTrayIcon, WindowID, ImageID)
Цитата:
hWin=OpenWindow(0,2,2,200,200,"",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
Вот здесь через меню работает а через двайной клик нет.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Global LayoutTemp, Count=0, hWindow, hWnd, hWin.l
Global hIcoEng.l=LoadIcon_(GetModuleHandle_(0), 400)  ; Загрузка иконки из ресура файла
Global hIcoRus.l=LoadIcon_(GetModuleHandle_(0), 500)  ; Загрузка иконки из ресура файла
 
Procedure ScrollLock(State)
If GetKeyState_(#VK_SCROLL)=State
 keybd_event_(#VK_SCROLL,$45,1,0)
 keybd_event_(#VK_SCROLL,$45,3,0)
EndIf
EndProcedure
 
Procedure GetLayoutWindowActive()
 WindowsHandle=GetForegroundWindow_()
 ProcessId=GetWindowThreadProcessId_(WindowsHandle,0)
 Layout=GetKeyboardLayout_(ProcessId)
 
 If Count=0 :If  LayoutTemp<> Layout :LayoutTemp=Layout :EndIf
 ElseIf Count=1 :Count=0 :If LayoutTemp=Layout
     
   If Layout=68748313
    SetMenuItemState(0,1,0)
    SetMenuItemState(0,2,1)
    ChangeSysTrayIcon(1,hIcoRus)
    SysTrayIconToolTip(1, "Русский")
    ScrollLock(0)
    SetSystemCursor_(LoadCursor_(GetModuleHandle_(0), 200), #OCR_IBEAM) ; Rus.cur Загружаем курсор из ресура и устанавливаем как системный
   ElseIf Layout=67699721
    SetMenuItemState(0,2,0)
    SetMenuItemState(0,1,1)
    ChangeSysTrayIcon(1,hIcoEng)
    SysTrayIconToolTip(1, "Английский")
    ScrollLock(1)
    SetSystemCursor_(LoadCursor_(GetModuleHandle_(0), 100), #OCR_IBEAM) ; En.cur
   EndIf
 
  EndIf :EndIf
EndProcedure
 
Import "cursor.res" : EndImport
 
hWin=OpenWindow(0,2,2,20,20,"",#PB_Window_Invisible|#PB_Window_BorderLess)
 AddSysTrayIcon(1,WindowID(0),hIcoRus)
 SysTrayIconToolTip(1, "Русский")
 
 If CreatePopupMenu(0)
   MenuItem(1,"Английский")
   MenuItem(2,"Русский")
   MenuBar()
   MenuItem(3,"Закрыть")
 EndIf
 
 SetTimer_(WindowID(0),1,100,@GetLayoutWindowActive() )
 
 Repeat
   
 Event=WaitWindowEvent()
 Menu=EventMenu()
 Type=EventType()
  If Event=#PB_Event_SysTray
   If Type=#PB_EventType_RightClick
     DisplayPopupMenu(0,WindowID(0) )
   EndIf
   If Type=#PB_EventType_LeftDoubleClick
     WindowsHandle=GetForegroundWindow_()
       ProcessId=GetWindowThreadProcessId_(WindowsHandle,0)
       Layout=GetKeyboardLayout_(ProcessId)
       If Layout=68748313     ; Rus
          LoadKeyboardLayout_("00000409", #KLF_ACTIVATE)
        ElseIf Layout=67699721  ; En
          LoadKeyboardLayout_("00000419", #KLF_ACTIVATE)  
       EndIf
     
     
   EndIf
  EndIf    
  If Event=#PB_Event_Menu And Menu=3
     Break
  ElseIf Event=#PB_Event_Menu And Menu=1
     SetMenuItemState(0,2,0)
     SetMenuItemState(0,1,1)
     LoadKeyboardLayout_("00000409", #KLF_ACTIVATE)
  ElseIf Event=#PB_Event_Menu And Menu=2
     SetMenuItemState(0,1,0)
     SetMenuItemState(0,2,1)
     LoadKeyboardLayout_("00000419", #KLF_ACTIVATE)  
 EndIf
         
 ForEver
 KillTimer_(WindowID(0),1)
 SetSystemCursor_(LoadCursor_(GetModuleHandle_(0), 300), #OCR_IBEAM) ; Standart.cur
 End
 



Последний раз редактировалось mestnyi Ср май 22, 2013 6:03 pm, всего редактировалось 2 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 22, 2013 6:02 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6651
Благодарил (а): 36 раз.
Поблагодарили: 234 раз.
Пункты репутации: 65
mestnyi писал(а):
А почему правый клик на иконке в трее через меню все работает?

Что именно работает? Просто иконка меняется и всё. Язык не переключается. Вернее переключается, но для приложения из которого была вызвана команда.
Поверь сам. Запусти блокнот и начни печатать. Переключай раскладку по команде из трея. Язык в блокноте не изменяется!

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 22, 2013 6:06 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 780
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 14 раз.
Пункты репутации: 0
kvitaliy
Цитата:
Что именно работает?
Язык переключается через меню а двойной клик ничего не делает.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 22, 2013 6:11 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6651
Благодарил (а): 36 раз.
Поблагодарили: 234 раз.
Пункты репутации: 65
mestnyi писал(а):
Язык переключается через меню

ТЫ ПРОВЕРЯЛ НА БЛОКНОТЕ?
Ещё раз повторяю, для тех кто в танке - Язык НЕ ПЕРЕКЛЮЧАЕТСЯ! Иконка меняется, но для всех приложений( кроме твоего) язык остается прежним.

_________________
read-only ¯\_(ツ)_/¯


Последний раз редактировалось kvitaliy Ср май 22, 2013 6:16 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 22, 2013 6:15 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6651
Благодарил (а): 36 раз.
Поблагодарили: 234 раз.
Пункты репутации: 65
Для "глобального" переключения можно в заданный процесс подгружать Dll, которая и будет переключать раскладку для этого процесса, т.к. ее код ессно будет выполняться в контексте этого процесса. Пример - программа Punto Switcher, подгружает во все процессы библиотеку correct.dll.
Или ещё вариант - менять раскладку по умолчанию при помощи SystemParametersInfo. Тогда все процессы запущенные после этого будут иметь эту раскладку.

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 22, 2013 6:20 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 780
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 14 раз.
Пункты репутации: 0
kvitaliy
Цитата:
ТЫ ПРОВЕРЯЛ НА БЛОКНОТЕ?
Ещё раз повторяю, для тех кто в танке - Язук НЕ ПЕРЕКЛЮЧАЕТСЯ! Иконка меняется, но для всех приложений( кроме твоего) язык остается прежним.
мне что видео отправит, как раз значок моей программы не меняется, а язык системы меняется, в блокноте ,в новом проекте и т.д.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 22, 2013 6:31 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6651
Благодарил (а): 36 раз.
Поблагодарили: 234 раз.
Пункты репутации: 65
mestnyi писал(а):
, а язык системы меняется, в блокноте ,в новом проекте и т.д.

Ну вооще! У тебя фамилия случайно не Билл Гейц?
Давай видео, так не бывает, потому, что этого не может быть в принципе. Системный вызов LoadKeyboardLayout переключает раскладку клавиатуры локально - внутри программы, это ЗАКОН!. Или у тебя Винда не как у всех?
А нет, зачем видео - давай свой проект + скомпилированный exe, все вместе и проверим!

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 22, 2013 6:54 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 780
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 14 раз.
Пункты репутации: 0
Вот держи


Вложения:
Video_рп6.zip [972.42 KiB]
Скачиваний: 238
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 22, 2013 7:15 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6651
Благодарил (а): 36 раз.
Поблагодарили: 234 раз.
Пункты репутации: 65
mestnyi писал(а):
Вот держи

Да нет, я такие фокусы тоже могу показывать! Я же не вижу, что ты там клавиатурой манипулируешь?
Исходник ( с ресурсами) и ЕХЕ шник давай. Если у людей получиться, то значит ты гений, а создатели Punto Switcher лохи последние.

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 22, 2013 7:31 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 71 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
kvitaliy писал(а):
создатели Punto Switcher лохи последние.

:D

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 22, 2013 8:48 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 780
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 14 раз.
Пункты репутации: 0
kvitaliy на держи


Вложения:
KeyboardLayout.zip [21.3 KiB]
Скачиваний: 242
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 22, 2013 9:29 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6651
Благодарил (а): 36 раз.
Поблагодарили: 234 раз.
Пункты репутации: 65
mestnyi писал(а):
на держи

Ни чего она не переключает, кроме штатного индикатора раскладки. Печатаю в Блокноте, делаю LeftDoubleClick по иконке, индикатор переключился, перехожу снова в блокнот - индикатор вернулся в прежний режим и печать опять идет теми же буквами, что и до LeftDoubleClick. И так во всех программах, где есть ввод текста. И так должно быть.
Хочешь сказать, что у тебя по другому?
Люди, у кого ещё, кроме mestnyi по двойному клику по иконке им выложенного кода переключает реально раскладку в чужих программах? Есть такие, отзовитесь!

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 22, 2013 9:55 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 780
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 14 раз.
Пункты репутации: 0
kvitaliy
ты реально издеваешься или как
Цитата:
Люди, у кого ещё, кроме mestnyi по двойному клику по иконке им выложенного кода переключает реально раскладку в чужих программах?
я тебе о чем, уже третий час пишу
Цитата:
Язык переключается через меню, а двойной клик ничего не делает.

хотя одинаковый код стоит в обеих событиях.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 22, 2013 9:59 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6651
Благодарил (а): 36 раз.
Поблагодарили: 234 раз.
Пункты репутации: 65
mestnyi писал(а):
Язык переключается через меню, а двойной клик ничего не делает.

А я тебе 3- й час пишу, что хоть 2-й клик, хоть меню - НЕ ПЕРЕКЛЮЧАЕТ!
И НЕ ДОЛЖНО ПЕРЕКЛЮЧАТЬ!
А код у тебя абсолютно одинаковый, что в меню, что в LeftDoubleClick, ты его просто скопипастил, какая разница?

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 22, 2013 10:03 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 71 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
mestnyi, а что удивительного то? Событие LeftDoubleClick будет, если ты будешь по окну программы своей клацать. А если по чужим окнам, то не будет работать. Нужно ставить хук на мышь.

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 57 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB