purebasic.info

PureBasic forum
Текущее время: Сб ноя 18, 2017 8:42 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 26, 2007 4:31 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11053
Благодарил (а): 4 раз.
Поблагодарили: 374 раз.
Цитата:
Второй раз на грабли наступаешь
Похоже на то. :roll:
А наступил на них (на грабли) потому что, в среде компилятора всё нормально работает и без таймера. :shock:

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Скрываем программу
СообщениеДобавлено: Ср июл 12, 2017 12:30 pm 
Не в сети
доцент

Зарегистрирован: Вт дек 11, 2012 9:14 pm
Сообщений: 39
Благодарил (а): 13 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Здравствуйте!

Попытался использовать Ваш код для своих целей. Нужно чтобы фоновая программа по определенной комбинации пальцев копировала папку со всем ее содержимым в новое место. Если в процедуре указать команду CopyDirectory(), то ничего не происходит. Пришлось написать отдельный екзешник такого вида CopyDirectory(ReadDir$, WriteDir$, "", #PB_FileSystem_Recursive) и запускать его из процедуры, чтобы он самостоятельно копировал файлы. В таком варианте все работает, но как-то неприлично делать кучу екзешников для такой примитивной задачи.
Подскажите пожалуйста как правильно написать код?


Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
;ReadDir$="E:\123"  ; Задаем переменную откуда копировать
;WriteDir$="E:\321"  ; Задаем переменную куда копировать
 
 
Procedure Proverka()
If GetAsyncKeyState_(#VK_F7) And GetAsyncKeyState_(#VK_CONTROL)
 ; MessageRequester("","Кнопки Ctrl и F7 нажаты" )
 ;CopyDirectory(ReadDir$, WriteDir$, "", #PB_FileSystem_Recursive) ;Так не копирует
 RunProgram("E:\Copy_Files\Copy.exe") ; А так копирует
EndIf
EndProcedure
StartTimer(1, 300, @Proverka())  
 
Repeat
Delay(1)
Until GetAsyncKeyState_(#VK_ESCAPE)
EndTimer(1)
End



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Скрываем программу
СообщениеДобавлено: Ср июл 12, 2017 1:21 pm 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 381
Благодарил (а): 47 раз.
Поблагодарили: 18 раз.
Пункты репутации: 10
Gipopotam, как то что Вы спрашиваете относится к данной теме?

PB531 без проблем создаёт (воссоздаёт структуру папок) и копирует.
Код:
1
Debug CopyDirectory("c:\CCCP", "c:\CCCP-2", "", #PB_FileSystem_Recursive)


возвращает 1.

Если не работает, то может тогда свою процедуру написать?

Добавлено:
Когда тестировался код, то строчка 7 случайно не была ли раскомментирована? Если да, то это объясняет почему ничего не происходило. MessageRequester ставит программу на паузу!

И ещё... что значит StartTimer и EndTimer?
Может всё-таки AddWindowTimer/SetTimer_ и RemoveWindowTimer/KillTimer_?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Скрываем программу
СообщениеДобавлено: Ср июл 12, 2017 3:42 pm 
Не в сети
доцент

Зарегистрирован: Вт дек 11, 2012 9:14 pm
Сообщений: 39
Благодарил (а): 13 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
knower писал(а):
Gipopotam, как то что Вы спрашиваете относится к данной теме?
Добрый день!
Спасибо, что откликнулись. Написанный здесь код очень подошел для моих целей.

Цитата:
PB531 без проблем создаёт (воссоздаёт структуру папок) и копирует.
Код:
1
Debug CopyDirectory("c:\CCCP", "c:\CCCP-2", "", #PB_FileSystem_Recursive)


возвращает 1.
В Вашем случае адреса директорий заданы не через переменную, а в явном виде.
Так у меня тоже работает, я пользуюсь PB5.0.

knower писал(а):
Если не работает, то может тогда свою процедуру написать?
Эта процедура меня вполне устраивает.

Проблема была в том, что переменные были у меня были не не глобальные, поэтому в процедуре не работали.
Спасибо за помощь, проблема решена. В таком виде все работает

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Global ReadDir$, WriteDir$
 
 ReadDir$=PathRequester("Пожалуйста выберите директорию для чтения", "")     ;Задаем переменную откуда копировать
 WriteDir$=PathRequester("Пожалуйста выберите директорию для записи", "")     ; Задаем переменную куда копировать
 
Procedure Proverka()
  If GetAsyncKeyState_(#VK_F7) And GetAsyncKeyState_(#VK_CONTROL) ; Комбинацией клавишь запускаем файл Copy.exe и он копирует файлы
    CopyDirectory(ReadDir$, WriteDir$, "", #PB_FileSystem_Recursive)  
EndIf
EndProcedure
StartTimer(1, 300, @Proverka())  
Repeat
  Delay(1)
Until (#VK_ESCAPE)
EndTimer(1)
 
End



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Скрываем программу
СообщениеДобавлено: Ср июл 12, 2017 4:31 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1547
Откуда: Алматы
Благодарил (а): 11 раз.
Поблагодарили: 36 раз.
Пункты репутации: 5
возможно что папка, куда копируется - где-то в хитром месте, куда для доступа нужны права администратора. а там целая история запилить чтоб и админ права и автозапуск работали вместе.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Скрываем программу
СообщениеДобавлено: Ср июл 12, 2017 5:20 pm 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 381
Благодарил (а): 47 раз.
Поблагодарили: 18 раз.
Пункты репутации: 10
Gipopotam писал(а):
Проблема была в том, что переменные были у меня были не не глобальные, поэтому в процедуре не работали.

Правда. Не обратил внимания. Может немного облагородить код и сделать всё-таки с окном? Пути можно вводить как через кнопки, так и вручную.
Код:
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
ReadDir$=""
WriteDir$=""
 
OpenWindow(0, 0, 0, 310, 100, "Test KeyboardShortcut", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(1, 10,10,80,30,"source")
ButtonGadget(2, 10,45,80,30,"target")
StringGadget(3, 100,10,200,30,"")
StringGadget(4, 100,45,200,30,"")
TextGadget(5, 10,80,200,25,"Press Ctrl+F7 to proceed")
TextGadget(6, 210,80,80,25,"")
SetGadgetColor(6, #PB_Gadget_FrontColor,RGB(255, 0, 0))
 
AddKeyboardShortcut(0, #PB_Shortcut_Control|#PB_Shortcut_F7, 1)
 
Repeat
 
  Event = WaitWindowEvent()
 
  Select Event
    Case #PB_Event_Menu
      Select EventMenu()
        Case 1
          ReadDir$ = GetGadgetText(3)
          WriteDir$ = GetGadgetText(4)
          If ReadDir$<>"" And WriteDir$<>""
            SetGadgetText(6, "RECORDING")
            CopyDirectory(ReadDir$, WriteDir$, "", #PB_FileSystem_Recursive)
            SetGadgetText(6, "")
          EndIf
      EndSelect
     
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1
          ReadDir$=PathRequester("Пожалуйста выберите директорию для чтения", "")
          SetGadgetText(3, ReadDir$)
        Case 2
          WriteDir$=PathRequester("Пожалуйста выберите директорию для записи", "")
          SetGadgetText(4, WriteDir$)
      EndSelect
     
    Case #PB_Event_CloseWindow
      Exit = #True
  EndSelect
 
Until Exit



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Скрываем программу
СообщениеДобавлено: Чт июл 13, 2017 1:20 pm 
Не в сети
доцент

Зарегистрирован: Вт дек 11, 2012 9:14 pm
Сообщений: 39
Благодарил (а): 13 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
knower писал(а):
Правда. Не обратил внимания. Может немного облагородить код и сделать всё-таки с окном? Пути можно вводить как через кнопки, так и вручную.
Спасибо, с таким окном удобней, но не нужно чтобы программа только при запуске показала окно для выбора директорий, а потом сидела молча в процессах и не отсвечивала пока я не нажму нужные кнопки для копирования. Возьму часть из Вашего кода и вставлю в предыдущий.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Скрываем программу
СообщениеДобавлено: Чт июл 13, 2017 9:26 pm 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 381
Благодарил (а): 47 раз.
Поблагодарили: 18 раз.
Пункты репутации: 10
Gipopotam, может тогда в трей её убрать? Можно изменять директории. ВНИМАНИЕ! Включить поток в опциях.
Код:
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
Global ACT=0, Exit=0
 
Procedure Proverka(*x)
  Protected source$, target$
 
  Repeat
    If GetAsyncKeyState_(#VK_F7) And GetAsyncKeyState_(#VK_CONTROL) And ACT=0
      source$ = GetGadgetText(3)
      target$ = GetGadgetText(4)
      If source$<>"" And target$<>""
        ACT=1
        SetGadgetText(6, "RECORDING")
        CopyDirectory(source$, target$, "", #PB_FileSystem_Recursive)
        SetGadgetText(6, "")
        ACT=0
      EndIf
    Else
      Delay(500)
    EndIf
  Until Exit
EndProcedure
 
 
Define.s ReadDir="", WriteDir="", SysDir=Space(255)
 
GetSystemDirectory_(@SysDir,255)
hWnd = OpenWindow(0, 0, 0, 310, 100, "Test KeyboardShortcut", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ico=ExtractIcon_(0,SysDir+"\shell32.dll",12)
AddSysTrayIcon(1, hWnd, ico)
CreatePopupMenu(2)
MenuItem(3, "Show")
MenuItem(4, "Exit")
ButtonGadget(1, 10,10,80,30,"source")
ButtonGadget(2, 10,45,80,30,"target")
StringGadget(3, 100,10,200,30,"")
StringGadget(4, 100,45,200,30,"")
TextGadget(5, 10,80,200,25,"Press Ctrl+F7 to proceed")
TextGadget(6, 210,80,80,25,"")
SetGadgetColor(6, #PB_Gadget_FrontColor,RGB(255, 0, 0))
If CreateThread(@Proverka(), 0)=0:End:EndIf
 
Repeat
 
  Event = WaitWindowEvent()
 
  Select Event
    Case #PB_Event_SysTray
      Select EventType()
        Case #PB_EventType_RightClick
          If IsWindowVisible_(hWnd)
            DisableMenuItem(2, 3, 1)
          Else
            DisableMenuItem(2, 3, 0)
          EndIf
          DisplayPopupMenu(2, hWnd)
      EndSelect
     
    Case #PB_Event_Menu
      If GetAsyncKeyState_(#VK_LBUTTON)
        Select EventMenu()
          Case 3
            ShowWindow_(hWnd,#SW_RESTORE)
            SetForegroundWindow_(hWnd)
          Case 4
            If ACT=0:Break:EndIf
        EndSelect
      EndIf
     
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1
          ReadDir$=PathRequester("Пожалуйста выберите директорию для чтения", "")
          SetGadgetText(3, ReadDir$)
        Case 2
          WriteDir$=PathRequester("Пожалуйста выберите директорию для записи", "")
          SetGadgetText(4, WriteDir$)
      EndSelect
     
    Case #PB_Event_CloseWindow
      If ACT=0:Exit = #True:EndIf
    Case #PB_Event_MinimizeWindow
      HideWindow(0,#True)
     
  EndSelect
 
Until Exit


Управление: ПКМ - вызов меню; ЛКМ - выбор пункта меню. Кнопка "свернуть" в заголовке окна = скрыть окно. Завершение работы либо из меню -> "Exit", либо как обычно "x" в заголовке окна.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Скрываем программу
СообщениеДобавлено: Пт июл 14, 2017 11:06 am 
Не в сети
доцент

Зарегистрирован: Вт дек 11, 2012 9:14 pm
Сообщений: 39
Благодарил (а): 13 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
knower писал(а):
Gipopotam, может тогда в трей её убрать? Можно изменять директории. ВНИМАНИЕ! Включить поток в опциях.
Отлично, то что нужно!!!
Большое спасибо.


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

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


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

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


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

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